#ifndef LINEARSEARCH_H
#define LINEARSEARCH_H

#include "searchalgorithm.h"

// 线性查找类：继承自抽象基类 SearchAlgorithm
// 线性查找按顺序遍历数组中每一个元素，适用于无序或小规模数据
class LinearSearch : public SearchAlgorithm {
public:
    // 构造函数：接收一个值列表并初始化状态
    LinearSearch(const QVector<int>& values);

    // 执行一次查找步骤（查找一个元素）
    void step() override;

    // 查找是否结束
    bool isFinished() const override;

    // 获取当前数据（包含颜色，用于可视化）
    const QVector<SortBar>& getData() const override;

    // 设置要查找的目标值
    void setTarget(int value) override;

    // 是否已找到目标
    bool isFound() const override;

    // 返回目标值的索引（若找到）
    int getFoundIndex() const override;

    // 返回该查找算法的描述文本
    QString getDescription() const override;

    // 获取并重置当前步骤的比较计数
    int getAndResetCompareCount() override;

private:
    QVector<SortBar> bars;     // 存储数据条及其颜色信息
    int current;               // 当前正在比较的索引位置
    int target;                // 查找目标值
    bool found;                // 是否查找到目标值
    bool finished;             // 查找是否完成
    int foundIndex;            // 找到时的索引
    int compareCount;          // 当前步骤的比较计数
};

#endif // LINEARSEARCH_H
